// 标志位法:给每个已遍历过的节点加标志位，遍历链表，当出现下一个节点已被标志时，则证明单链表有环
var hasCycle = function (head) {
    while (head) {
        if (head.flag) return true;
        head.flag = true;
        head = head.next;
    }
    return false;
};
// 利用 JSON.stringify() 不能序列化含有循环引用的结构
var hasCycle = function (head) {
    try {
        JSON.stringify(head);
        return false;
    } catch (err) {
        return true;
    }
};
//  快慢指针:设置快慢两个指针，遍历单链表，快指针一次走两步，慢指针一次走一步，如果单链表中存在环，
// 则快慢指针终会指向同一个节点，否则直到快指针指向 null 时，快慢指针都不可能相遇
var hasCycle = function (head) {
    if (head == null || head.next == null) return false;
    let fast = head.next.next, slow = head.next;
    while (fast != slow) {
        if (fast == null || fast.next == null) return false;
        fast = fast.next.next;
        slow = slow.next;
    }
    return true;
};